package com.qianfeng.springmvc.controller;

//
//                            _ooOoo_  
//                           o8888888o  
//                           88" . "88  
//                           (| -_- |)  
//                            O\ = /O  
//                        ____/`---'\____  
//                      .   ' \\| |// `.  
//                       / \\||| : |||// \  
//                     / _||||| -:- |||||- \  
//                       | | \\\ - /// | |  
//                     | \_| ''\---/'' | |  
//                      \ .-\__ `-` ___/-. /  
//                   ___`. .' /--.--\ `. . __  
//                ."" '< `.___\_<|>_/___.' >'"".  
//               | | : `- \`.;`\ _ /`;.`/ - ` : | |  
//                 \ \ `-. \_ __\ /__ _/ .-` / /  
//         ======`-.____`-.___\_____/___.-`____.-'======  
//                            `=---='  
//  
//         .............................................  
//                  佛祖镇楼                  BUG辟易  
//          佛曰:  
//                  写字楼里写字间，写字间里程序员；  
//                  程序人员写程序，又拿程序换酒钱。  
//                  酒醒只在网上坐，酒醉还来网下眠；  
//                  酒醉酒醒日复日，网上网下年复年。  
//                  但愿老死电脑间，不愿鞠躬老板前；  
//                  奔驰宝马贵者趣，公交自行程序员。  
//                  别人笑我忒疯癫，我笑自己命太贱；  
//  


import com.qianfeng.springmvc.pojo.User;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Arrays;

/**
 * Created by Jackiechan on 2021/12/22/21:05
 *
 * @author Jackiechan
 * @version 1.0
 * @since 1.0
 */
@RequestMapping("/users")
@Controller //不要忘记这个注解
public class UserController {

    /**
     * 第一种获取参数的方式,还是通过request来获取,只需要在我们的方法中添加一个HttpServletRequest类型的对象即可
     * @param request
     */
    @RequestMapping("/test1")
    public void test1(HttpServletRequest request) {
        String id = request.getParameter("id");
        String name = request.getParameter("name");
        System.err.println(id + name);
    }


    /**
     * 参数的获取,如果是通过?key=value&key=value这种格式传递的参数,只需要在放发的参数中写一个对应名字的参数接受就行了
     * 方法的形参的参数名字必须和请求中的参数名保持一直,就可以直接获取,否则不行
     * @param id
     */
    @RequestMapping("/finduser")
    public void findUserById(String id,String name,String password) {
        System.err.println(id + "===>" + name+"--->"+password);
    }

    /**
     * 如果形参是基本数据类型,那么首先传递的时候的值必须符合格式要求,否则400
     * 其次,基本类型的参数默认必须传递,否则会抛出异常,因为没有传递参数就是null,null是不能转成数字的
     * 默认情况下我们服务端获取过来的参数都是字符串,所以默认值是null
     * 假如说我们的基本类型的参数 想要不传递,或者是说在不传递的情况下指定默认值,可以在对应的参数前面添加@RequestParam(required = false)来取消必须传递
     * 就采用基本数据类型的默认值作为参数,如果想单独设置默认值,则在注解内部通过defaultValue设置默认值
     * 这个默认值可以给任何参数设置
     * 默认情况下我们的方法的参数名和请求的参数名保持一致,如果不一致,可以在注解内通过name=xxx的方式来配置请求的参数名,注意一般我们从来不会这样指定
     * @param id
     * @param name
     * @param password
     */
    @RequestMapping("/finduser2")
    public void findUserById2(@RequestParam(required = false,defaultValue = "11111",name="iddddd") int id, @RequestParam(defaultValue = "lisi") String name, String password) {
        System.err.println(id + "===>" + name+"--->"+password);
    }

    /**
     * 如果用对象来接受?key=value&key=value这种格式传递的参数,只需要参数的名字和对象中对应的属性保持类型和名字一致就可以
     * @param user
     */
    @RequestMapping("/adduser")
    public void addUser(User user) {
        System.err.println(user);
    }

    /**
     *如果用数组来接受多个相同的key 的参数,参数格式key=value&key=value1这种格式传递的参数,只需要参数的名字和方法的形参名字一致就可以,类型变成数组
     * @param aihao
     */
    @RequestMapping("/aihao")
    public void aihao(String[] aihao) {
        System.err.println(Arrays.toString(aihao));
    }


    /**
     * {id}是一个占位符,他的作用是将请求路径中当前位置的那个值作为一个名字叫id的参数的值
     * 然后方法的参数的名字只需要和这个{}内部的名字保持一致, 那么springmvc会自动将路径中的这个值作为参数设置过去
     * 比如我们请求的是/findbyid/1  那么1就会作为参数传递给id  如果我们请求是/findbyid/19 那么19就作为参数传递过去
     * 这样子我们就不需要传递key= 这样的东西了,比较精简
     * 注意 实际访问的路径必须匹配到当前的地址
     * PathVariable注解修饰的参数说明的它的值来自于请求路径中和它名字一样的那个占位符对应的数据
     * @param id
     */
    @RequestMapping("/findbyid/{id}")
    public void findById(@PathVariable String id) {
        System.err.println("收到的参数id====>" + id);
    }

    /**
     * 路径参数的个数没关系,只要确定好方法的参数和谁有关就行了
     * 如果路径中的占位符的名字和形参的不一样是不行,除非通过给PathVariable注解添加参数指定路径中占位符的名字
     * @param id
     * @param name
     * @param a
     * @param pwd
     * @param b
     */
    @RequestMapping("/ceshi2/{id1}/{a}/{b}/{name}/{pwd}")
    public void ceshi2(@PathVariable("id1") String id,@PathVariable String name,@PathVariable String a,@PathVariable String pwd,@PathVariable String b) {
        System.err.println("收到的参数id====>" + id+name+pwd);
    }
}
